#ifndef DSPNASM_SYMBOL_H
#define DSPNASM_SYMBOL_H

#include <string>
#include <vector>
#include <memory>
#include "nasm/type/type.h"

namespace dspnasm {
    struct Symbol {
        std::string m_segmentName;  // 符号所在段名称

        std::string m_symbolName;   // 符号名称

        u32 m_offset;  // 符号的逻辑地址

        std::vector<u8> m_data; // 符号表示的数据

        bool m_isEqu; // 宏符号

        bool m_isExterned; // 外部符号

        bool m_isGlobal; // 全局符号

        static std::shared_ptr<Symbol> getEqu(const std::string &symbolName, const std::string &segmentName, u32 data);

        static std::shared_ptr<Symbol> getGlobal(const std::string &symbolName, const std::string &segmentName);

        static std::shared_ptr<Symbol> getExterned(const std::string &symbolName, const std::string &segmentName);

        static std::shared_ptr<Symbol> getLabel(const std::string &symbolName, const std::string &segmentName, u32 address);

        std::string toString() const;
    };
}

#endif //DSPNASM_SYMBOL_H
